package de.hska.artikelverwaltung.ui;

import static de.hska.util.EjbNames.ARTIKELVERWALTUNG_LOCAL_NAME;
import static de.hska.util.LogUtil.begin;
import static de.hska.util.LogUtil.end;
import static de.hska.util.WebConstants.FWD_START;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import de.hska.artikelverwaltung.Artikelverwaltung;
import de.hska.artikelverwaltung.db.Artikel;

public class ArtikelverwaltungUiBean {
	private static final Log LOG = LogFactory.getLog(ArtikelverwaltungUiBean.class);
	private static final boolean DEBUG = LOG.isDebugEnabled();
	
	// TODO EJB-Name ueberfluessig bei JBoss 5
	@EJB(name=ARTIKELVERWALTUNG_LOCAL_NAME)
	private Artikelverwaltung av;
	
	private List<Artikel> verfuegbareArtikel = null;
	private List<Artikel> auszusonderndeArtikel = new ArrayList<Artikel>();
	
	/**
	 */
	public List<Artikel> getVerfuegbareArtikel() {
		if (verfuegbareArtikel == null)
			verfuegbareArtikel = av.findVerfuegbareArtikel();
		return verfuegbareArtikel;
	}

	/**
	 */
	public void setVerfuegbareArtikel(List<Artikel> verfuegbareArtikel) {
		this.verfuegbareArtikel = verfuegbareArtikel;
	}

	/**
	 */
	public List<Artikel> getAuszusonderndeArtikel() {
		return auszusonderndeArtikel;
	}

	/**
	 */
	public void setAuszusonderndeArtikel(List<Artikel> ausgewaehlteArtikel) {
		this.auszusonderndeArtikel = ausgewaehlteArtikel;
	}


	/**
	 */
	public String aussondern() {
		if (DEBUG) begin(LOG, auszusonderndeArtikel);
		
		av.aussondern(auszusonderndeArtikel);
		// TODO Konkurrierendes Update
		
		auszusonderndeArtikel.clear();
		verfuegbareArtikel = null;
		
		if (DEBUG) end(LOG);
		return FWD_START;
	}
	

	/**
	 * F&uuml;r Dnd-Bean
	 */
	public void updateArtikelAuswahl(Object dragValue, Object dropValue) {
		if (DEBUG) begin(LOG, dragValue, dropValue);
		
		if (! "artikel".equals(dropValue)) {
			if (DEBUG) end(LOG, dropValue);
			return;
		}
		
		final Artikel artikel = (Artikel) dragValue;
		auszusonderndeArtikel.add(artikel);
		verfuegbareArtikel.remove(artikel);
		
		if (DEBUG) end(LOG, artikel);
	}
}
